package edu.zju.gis.dbfg.fileserver.dataLoader;


import edu.zju.gis.dbfg.fileserver.model.ConstructedDataField;

import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * 定义数据入库过程
 */
public interface LoadProcedure {

    /**
     * 设置入库工具源
     * 返回一个源数据读取迭代器
     *
     * @return
     */
    void setSource();

    /**
     * 校验数据入库工具Loader参数校验
     *
     * @return
     */
    void check();

    /**
     * 对入库数据进行预处理，包括数据清洗，不需要的字段的抛弃，空间字段合并为统一的wkt等
     *
     * @param lines
     * @return
     */
    List<Map<ConstructedDataField, String>> mapValues(List<String> lines) throws IOException;

    /**
     * 将读取的数据转换为对应数据集元数据规范的数据
     * 在此过程中进行数据规范校验
     *
     * @param values
     * @return
     */
    Boolean validate(Map<ConstructedDataField, String> values);

    List<Map<ConstructedDataField, String>> batchValidate(List<Map<ConstructedDataField, String>> values);

    /**
     * 数据入库操作执行
     *
     * @throws IOException
     */
    void exec() throws IOException;

    /**
     * 处理一些善后工作
     */
    void finish();

}
